package com.sky.service;

import com.sky.dto.*;
import com.sky.entity.Orders;
import com.sky.result.PageResult;
import com.sky.vo.OrderReportVO;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.TurnoverReportVO;

import java.time.LocalDate;

public interface OrderService {
    /**
     * 用户下单
     * @param ordersSubmitDTO 用户下单数据传输对象
     */
    OrderSubmitVO addOrder(OrdersSubmitDTO ordersSubmitDTO);

    /**
     * 客户催单
     * @param id 订单id
     */
    void reminderOrder(Long id);

    /**
     * 营业额统计
     * @param begin 开始日期
     * @param end 结束日期
     * @return 营业额统计数据
     */
    TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end);

    /**
     * 订单统计
     * @param begin 开始日期
     * @param end 结束日期
     * @return 订单统计数据
     */
    OrderReportVO getOrdersReport(LocalDate begin, LocalDate end);

    /**
     * 订单分页查询
     * @param ordersPageQueryDTO 分页查询参数
     * @return 分页查询结果
     */
    PageResult getOrderPage(OrdersPageQueryDTO ordersPageQueryDTO);


    /**
     * 根据id获取订单详情
     * @param id 订单id
     * @return 订单详情
     */
    Orders getOrderById(Long id);

    /**
     * 取消订单
     * @param ordersCancelDTO 取消订单参数
     */
    void cancelOrder(OrdersCancelDTO ordersCancelDTO);

    /**
     * 接单
     * @param ordersConfirmDTO 接单参数
     */
    void confirmOrder(OrdersConfirmDTO ordersConfirmDTO);

    /**
     * 拒单
     * @param ordersRejectionDTO 拒单参数
     */
    void rejectionOrder(OrdersRejectionDTO ordersRejectionDTO);

    /**
     * 派单
     * @param id 订单id
     */
    void deliveryOrder(Long id);

    /**
     * 完成订单
     * @param id 订单id
     */
    void completeOrder(Long id);

    /**
     * 查询订单状态数量统计
     * @return 订单状态数量
     */
    OrderStatisticsVO getOrderStatistics();
}
